home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / SOURCE.ZIP / E2.ASM < prev    next >
Assembly Source File  |  1991-08-19  |  5KB  |  254 lines

  1. code    segment
  2.         assume  cs:code, ds:code, es:code
  3.         org     100h
  4. prog:
  5.         jmp     main
  6.  
  7. asc     db      256 dup (0)
  8. lll     dw      ?
  9. tbl     dw      256 dup (0)
  10. cod     db      256 dup (0)
  11. len     db      256 dup (0)
  12. dat     db      0,10,16,9,64,8,64,8,0,7
  13. fn1     db      'te.com',0
  14. fn2     db      'sup.com',0
  15. fn3     db      'e1.com',0
  16.  
  17. main:
  18.  
  19.         call    read
  20.         call    build
  21.         call    uha
  22.         call    good
  23.         call    write
  24.  
  25.         mov     al,00h
  26.         mov     ah,4ch
  27.         int     21h
  28.  
  29. good    proc    near
  30.         mov     ax,cs
  31.         mov     ds,ax
  32.         mov     si,offset asc
  33.         mov     di,179
  34.         mov     cx,130
  35.         rep     movsb
  36.  
  37.         mov     dx,offset fn3
  38.         mov     al,00h
  39.         mov     ah,3dh
  40.         int     21h
  41.         jc      ssr
  42.         mov     bx,ax
  43.         mov     ax,es
  44.         mov     ds,ax
  45.         sub     dx,dx
  46.         mov     cx,179
  47.         mov     ah,3fh
  48.         int     21h
  49.         jc      ssr
  50.         mov     ah,3eh
  51.         int     21h
  52.         mov     ax,cs
  53.         mov     ds,ax
  54. ssr:    ret
  55. good    endp
  56.  
  57. uha     proc    near
  58.         mov     ax,cs
  59.         add     ax,1000h
  60.         mov     ds,ax
  61.         add     ax,1000h
  62.         mov     es,ax
  63.         mov     bx,4fffh
  64.         mov     di,bx
  65.         mov     ch,0
  66.         sub     bp,bp
  67. lu10:   sub     ax,ax
  68.         mov     al,[bx]
  69.         mov     si,ax
  70.         mov     al,cs:cod[si]
  71.         mov     dl,cs:len[si]
  72.         mov     cl,dl
  73.         cmp     dl,7
  74.         jne     lu20
  75.         inc     ah
  76. lu20:   sub     cl,ch
  77.         shl     ax,cl
  78.         or      bp,ax
  79.         add     ch,16
  80.         sub     ch,dl
  81.         mov     cl,8
  82. lu30:   cmp     ch,cl
  83.         jc      lu40
  84.         mov     ax,bp
  85.         shl     bp,cl
  86.         mov     es:[di],ah
  87.         dec     di
  88.         sub     ch,cl
  89.         jmp     short lu30
  90. lu40:   dec     bx
  91.         cmp     bx,0ffffh
  92.         jne     lu10
  93.         mov     ax,bp
  94.         mov     es:[di],ah
  95.         mov     lll,di
  96.         mov     ah,0
  97. lu50:   dec     di
  98.         mov     es:[di],ah
  99.         cmp     di,0
  100.         jne     lu50
  101.         ret
  102. uha     endp
  103.  
  104. fill    proc    near
  105.         sub     si,si
  106.         mov     cx,0100h
  107. lf10:   mov     ax,si
  108.         mov     cs:asc[si],al
  109.         inc     si
  110.         loop    lf10
  111.         sub     bx,bx
  112.         mov     cx,5000h
  113. lf20:   mov     al,[bx]
  114.         mov     si,ax
  115.         shl     si,1
  116.         inc     cs:tbl[si]
  117.         inc     bx
  118.         loop    lf20
  119.         ret
  120. fill    endp
  121.  
  122. pause   proc    near
  123.         push    ax
  124.         mov     ah,01h
  125.         int     21h
  126.         pop     ax
  127.         ret
  128. pause   endp
  129.  
  130. sort    proc    near
  131.         mov     cx,00ffh
  132. l10:    mov     di,cx
  133.         mov     bx,cx
  134.         shl     bx,1
  135.         add     bx,offset tbl
  136.         sub     ax,ax
  137. l20:    mov     si,ax
  138.         shl     si,1
  139.         mov     dx,tbl[si]
  140.         cmp     dx,[bx]
  141.         jnc     l30
  142.         xchg    dx,[bx]
  143.         xchg    dx,tbl[si]
  144.         shr     si,1
  145.         mov     dl,asc[si]
  146.         xchg    dl,asc[di]
  147.         xchg    dl,asc[si]
  148. l30:    inc     ax
  149.         cmp     ax,cx
  150.         jc      l20
  151.         loop    l10
  152.  
  153.         mov     di,offset asc + 128
  154.         sub     bx,bx
  155. k10:    mov     [bx][di],bl
  156.         inc     bl
  157.         jnz     k10
  158.         mov     si,offset asc
  159. k20:    mov     bl,[si]
  160.         mov     byte ptr [bx][di],0
  161.         inc     si
  162.         cmp     si,di
  163.         jne     k20
  164.         dec     di
  165.         mov     cx,128
  166. k30:    inc     di
  167.         cmp     byte ptr [di],0
  168.         je      k30
  169.         mov     al,[di]
  170.         mov     [si],al
  171.         inc     si
  172.         loop    k30
  173.  
  174.  
  175.         ret
  176. sort    endp
  177.  
  178. make    proc    near
  179.         mov     cx,16
  180.         mov     bx,offset dat
  181.         sub     si,si
  182.         sub     ax,ax
  183. lm10:   mov     al,asc[si]
  184.         mov     di,ax
  185.         mov     dx,si
  186.         add     dl,[bx]
  187.         mov     cod[di],dl
  188.         mov     dl,[bx+1]
  189.         mov     len[di],dl
  190.         inc     si
  191.         cmp     si,cx
  192.         jnz     lm10
  193.         inc     bx
  194.         inc     bx
  195.         shl     cx,1
  196.         cmp     cx,512
  197.         jnz     lm10
  198.         ret
  199. make    endp
  200.  
  201. build   proc    near
  202.         call    fill
  203.         mov     ax,cs
  204.         mov     ds,ax
  205.         call    sort
  206.         call    make
  207.         ret
  208. build   endp
  209.  
  210. write   proc    near
  211.         mov     dx,offset fn2
  212.         mov     al,02h
  213.         mov     ah,3dh
  214.         int     21h
  215.         jc      sw
  216.         mov     bx,ax
  217.         mov     ax,es
  218.         mov     ds,ax
  219.         sub     dx,dx
  220.         mov     cx,5000h
  221.         mov     ah,40h
  222.         int     21h
  223.         jc      sw
  224.         mov     ah,3eh
  225.         int     21h
  226. sw:     ret
  227. write   endp
  228.  
  229. read    proc    near
  230.         mov     dx,offset fn1
  231.         mov     al,00h
  232.         mov     ah,3dh
  233.         int     21h
  234.         jc      sr
  235.         mov     bx,ax
  236.         mov     ax,ds
  237.         add     ax,1000h
  238.         mov     ds,ax
  239.         sub     dx,dx
  240.         mov     cx,5000h
  241.         mov     ah,3fh
  242.         int     21h
  243.         jc      sr
  244.         mov     ah,3eh
  245.         int     21h
  246. sr:     ret
  247. read    endp
  248.  
  249.  
  250. last    label   byte
  251. code    ends
  252.         end     prog
  253.  
  254.